<?php

class Marcas_Model extends CI_Model {

    public function get($cedula) {
        $this->db->select('usuario,estado,hora_actual');
        $this->db->from('marcas');
        $this->db->where('usuario = ' . "'" . $cedula . "'");
        $query = $this->db->get();

        if ($query->num_rows() > 0) {
            return $query; // just return $query
        }
    }

    public function get_rango($cedula) {
        $this->db->select('usuario,estado,hora_actual');
        $this->db->from('marcas');
        $this->db->where('usuario = ' . "'" . $cedula . "'" . ' AND 
                        hora_actual between now() - INTERVAL 1 DAY and now()');
        $query = $this->db->get();

        if ($query->num_rows() > 0) {
            return $query; // just return $query
        }
    }

    public function get_Fecha_Limit($limit, $start, $cedula, $desde, $hasta, $contar) {
        $this->db->select('usuario,estado,hora_actual');
        $this->db->from('marcas');
        $this->db->where('usuario = ' . "'" . $cedula . "'" . ' AND
                                   DATE_FORMAT(hora_actual,\'%Y-%m-%d\') >= DATE_FORMAT(' . "'" . $desde . "'" . ',\'%Y-%m-%d\') AND
                                       DATE_FORMAT(hora_actual,\'%Y-%m-%d\') <= DATE_FORMAT(' . "'" . $hasta . "'" . ',\'%Y-%m-%d\')');

        if ($contar == TRUE) {
            return $this->db->count_all_results();
        } else {
            $this->db->limit($limit, $start);
            $query = $this->db->get();
            if ($query->num_rows() > 0) {

                return $query; // just return $query
            } else {
                return NULL;
            }
        }
    }

    public function getTardia_usuario_Limit($limit, $start, $cedula, $desde, $hasta, $contar) {
        $this->db->select('usuario,estado,hora_actual');
        $this->db->from('marcas');
        $this->db->where('usuario = ' . "'" . $cedula . "'" . ' AND (estado = 2 or estado = 4 or estado = 6)');
        $this->db->where('DATE_FORMAT(hora_actual,\'%Y-%m-%d\') >= DATE_FORMAT(' . "'" . $desde . "'" . ',\'%Y-%m-%d\') AND
                                       DATE_FORMAT(hora_actual,\'%Y-%m-%d\') <= DATE_FORMAT(' . "'" . $hasta . "'" . ',\'%Y-%m-%d\')');
        //$sql = "SELECT * FROM marcas where id = ?";
        if ($contar == TRUE) {
            return $this->db->count_all_results();
        } else {
            $this->db->limit($limit, $start);
            $query = $this->db->get();
            if ($query->num_rows() > 0) {

                return $query; // just return $query
            } else {
                return NULL;
            }
        }
    }

    public function getAusencia_usuario_Limit($limit, $start, $cedula, $desde, $hasta, $contar) {
        $this->db->select('usuario,estado,hora_actual');
        $this->db->from('marcas');
        $this->db->where('usuario = ' . "'" . $cedula . "'" . ' AND (marcas.estado = 3 or marcas.estado = 5 or marcas.estado = 7)');
        $this->db->where('DATE_FORMAT(hora_actual,\'%Y-%m-%d\') >= DATE_FORMAT(' . "'" . $desde . "'" . ',\'%Y-%m-%d\') AND
                                       DATE_FORMAT(hora_actual,\'%Y-%m-%d\') <= DATE_FORMAT(' . "'" . $hasta . "'" . ',\'%Y-%m-%d\')');

        if ($contar == TRUE) {
            return $this->db->count_all_results();
        } else {
            $this->db->limit($limit, $start);
            $query = $this->db->get();
            if ($query->num_rows() > 0) {

                return $query; // just return $query
            } else {
                return NULL;
            }
        }
    }

    // Este metodo es utilizado en Estadisticas para sacar lo siguiente:
    // Nombre de usuario, cedula de usuario, cantidad de tardias
    // y lo acomoda de mayor a menor
    public function getTardia() {

        $query = $this->db->query('(select  usuario.nombre, usuario.apellidos, tardia.marca, marcas.estado, horario.entrada, marcas.hora_actual 
                            from (select marca from tardia where estado = 1) as tardia,
                                marcas,
                                (select cedula, nombre, apellidos from usuario) as usuario,
                                (select id,entrada from horario) as horario where
                                (marcas.id = tardia.marca) and (marcas.usuario = usuario.cedula) and (marcas.horario = horario.id))');
        if ($query->num_rows() > 0) {
            return $query; // just return $query
        }
    }

    public function getAusencias($conLimit, $limit, $start, $contar) {

        $consulta = 'SELECT usuario.nombre,usuario.apellidos, marcas.usuario, COUNT(marcas.usuario) cantidad
                                    FROM marcas, usuario where (marcas.estado = 3 or marcas.estado = 5 or marcas.estado = 7)
                                    and marcas.usuario = usuario.cedula
                                    GROUP BY marcas.usuario
                                    HAVING COUNT(marcas.usuario) = cantidad  
                                    ORDER BY cantidad DESC';
        if ($conLimit == TRUE) {
            $consulta .= ' LIMIT ' . $start . ',' . $limit;
        }

        $query = $this->db->query($consulta);

        //$query = $this->db->get();
        if ($contar == TRUE) {
            return $query->num_rows();
        } else
        if ($query->num_rows() > 0)
            return $query; // just return $query
        else
            return NULL;
    }

    public function getTotalAusenciasAprobadas() {
        $query = $this->db->query('SELECT SUM(cantidad) suma from (
                                    SELECT marcas.usuario, COUNT(marcas.usuario) cantidad
                                    FROM marcas where (marcas.estado = 5)
                                    GROUP BY marcas.usuario
                                    HAVING COUNT(marcas.usuario) = cantidad  
                                    ORDER BY cantidad DESC) as tabla;');
        if ($query->num_rows() > 0) {
            return $query; // just return $query
        } else {
            return NULL;
        }
    }

    public function getTotalAusenciasRechazadas() {
        $query = $this->db->query('SELECT SUM(cantidad) suma from (
                                    SELECT marcas.usuario, COUNT(marcas.usuario) cantidad
                                    FROM marcas where (marcas.estado = 7)
                                    GROUP BY marcas.usuario
                                    HAVING COUNT(marcas.usuario) = cantidad  
                                    ORDER BY cantidad DESC) as tabla;');
        if ($query->num_rows() > 0) {
            return $query; // just return $query
        } else {
            return NULL;
        }
    }

    public function getTotalAusencias() {
        $query = $this->db->query('SELECT SUM(cantidad) suma from (
                                    SELECT marcas.usuario, COUNT(marcas.usuario) cantidad
                                    FROM marcas where (marcas.estado = 3 or marcas.estado = 5)
                                    GROUP BY marcas.usuario
                                    HAVING COUNT(marcas.usuario) = cantidad  
                                    ORDER BY cantidad DESC) as tabla');
        if ($query->num_rows() > 0) {
            return $query; // just return $query
        } else {
            return NULL;
        }
    }

    public function getTotalTardiasAprobadas() {
        $query = $this->db->query('SELECT SUM(cantidad) suma from (
                                    SELECT marcas.usuario, COUNT(marcas.usuario) cantidad
                                    FROM marcas where (marcas.estado = 4)
                                    GROUP BY marcas.usuario
                                    HAVING COUNT(marcas.usuario) = cantidad  
                                    ORDER BY cantidad DESC) as tabla;');
        if ($query->num_rows() > 0) {
            return $query; // just return $query
        } else {
            return NULL;
        }
    }

    public function getTotalTardiasRechazadas() {
        $query = $this->db->query('SELECT SUM(cantidad) suma from (
                                    SELECT marcas.usuario, COUNT(marcas.usuario) cantidad
                                    FROM marcas where (marcas.estado = 6)
                                    GROUP BY marcas.usuario
                                    HAVING COUNT(marcas.usuario) = cantidad  
                                    ORDER BY cantidad DESC) as tabla;');
        if ($query->num_rows() > 0) {
            return $query; // just return $query
        } else {
            return NULL;
        }
    }

    public function getTotalTardias() {
        $query = $this->db->query('SELECT SUM(cantidad) suma from (
                                    SELECT marcas.usuario, COUNT(marcas.usuario) cantidad
                                    FROM marcas where (marcas.estado = 2 or marcas.estado = 4)
                                    GROUP BY marcas.usuario
                                    HAVING COUNT(marcas.usuario) = cantidad  
                                    ORDER BY cantidad DESC) as tabla;');
        if ($query->num_rows() > 0) {
            return $query; // just return $query
        } else {
            return NULL;
        }
    }

    // Este metodo es utilizado en Estadisticas para sacar lo siguiente:
    // Nombre de usuario, cedula de usuario, cantidad de ausencias
    // y lo acomoda de mayor a menor
    public function getTardias($conLimit, $limit, $start, $contar) {
        if ($start == -1 || $start == 0)
            $start = 0;
        $consulta = 'SELECT usuario.nombre, usuario.apellidos, marcas.usuario, COUNT(marcas.usuario) cantidad
                                    FROM marcas, usuario where (marcas.estado = 2 or marcas.estado = 4 or marcas.estado = 6)
                                    and marcas.usuario = usuario.cedula
                                    GROUP BY marcas.usuario
                                    HAVING COUNT(marcas.usuario) = cantidad  
                                    ORDER BY cantidad DESC';

        if ($conLimit == TRUE) {
            $consulta .= ' LIMIT ' . $start . ',' . $limit;
        }

        $query = $this->db->query($consulta);

        //$query = $this->db->get();
        if ($contar == TRUE) {
            return $query->num_rows();
        } else
        if ($query->num_rows() > 0)
            return $query; // just return $query
        else
            return NULL;
    }

    public function getTotalMarcas($cedula) {
        $query = $this->db->query('SELECT SUM(cantidad) suma from (
                                    SELECT marcas.usuario, COUNT(marcas.usuario) cantidad
                                    FROM marcas where (marcas.usuario  = ' . "'" . $cedula . "'" . ')
                                    GROUP BY marcas.usuario
                                    HAVING COUNT(marcas.usuario) = cantidad  
                                    ORDER BY cantidad DESC) as tabla;');
//                ('SELECT SUM(cantidad) suma from (
//                                    SELECT marcas.usuario, COUNT(marcas.usuario) cantidad
//                                    FROM marcas 
//                                    GROUP BY marcas.usuario
//                                    HAVING COUNT(marcas.usuario) = cantidad  
//                                    ORDER BY cantidad DESC) as tabla limit 0, 5;');
        if ($query->num_rows() > 0) {
            return $query; // just return $query
        } else {
            return NULL;
        }
    }

    public function actualizarEstadoDeMarca($cedula, $marca) {
        $this->db->select('estado');
        $this->db->from('marcas');
        $this->db->where('usuario = ' . "'" . $cedula . "'");
        $this->db->where('id = ' . "'" . $marca . "'");
        $query = $this->db->get();

        if ($query->num_rows() == 1) {
            foreach ($query->result() as $query) {
                if ($query->estado == 2 || $query ->estado == 6) {
                    $data = array(
                        'estado' => 4
                    );
                    $this->db->where('usuario', $cedula);
                    $this->db->where('id', $marca);
                    $this->db->update('marcas', $data);
                } else if ($query->estado == 3 ||  $query ->estado == 7) {  // si el query devuelve 3 implica que es una ausencia
                    $data = array(
                        'estado' => 5
                    );
                    $this->db->where('usuario', $cedula);
                    $this->db->where('id', $marca);
                    $this->db->update('marcas', $data);
                }
            }
        }
        // si el query devuelve 2 implica que es una tardia
    }

    public function actualizarEstadoDeMarcaRechazados($cedula, $marca) {
        $this->db->select('estado');
        $this->db->from('marcas');
        $this->db->where('usuario = ' . "'" . $cedula . "'");
        $this->db->where('id = ' . "'" . $marca . "'");
        $query = $this->db->get();

        // si el query devuelve 2 implica que es una tardia
        if ($query->num_rows() == 1) {
            foreach ($query->result() as $query) {
                if ($query->estado == 2 || $query ->estado == 4) {
                    $data = array(
                        'estado' => 6
                    );
                    $this->db->where('usuario', $cedula);
                    $this->db->where('id', $marca);
                    $this->db->update('marcas', $data);
                } else if ($query->estado == 3 || $query ->estado == 5) {  // si el query devuelve 3 implica que es una ausencia
                    $data = array(
                        'estado' => 7
                    );
                    $this->db->where('usuario', $cedula);
                    $this->db->where('id', $marca);
                    $this->db->update('marcas', $data);
                }
            }
        }
    }

    public function getReportePDF($cedula, $estado, $estadoAprobado, $estadoRechazado) {

        $query = $this->db->query('(select usuario.nombre, usuario.apellidos,usuario.cedula,marcas.estado, horario.entrada, marcas.hora_actual 
                from ((select * from marcas where usuario = ' . $cedula . ' and( estado = ' . $estado . ' or estado = ' . $estadoAprobado . ' or estado = ' . $estadoRechazado . ')
                         and DATE_FORMAT(hora_actual,\'%y-%m\') = DATE_FORMAT(NOW(),\'%y-%m\')) as marcas,
		(select cedula, nombre, apellidos from usuario where cedula = ' . $cedula . ') as usuario,
		(select id,entrada from horario) as horario) where ((horario.id = marcas.horario) and (usuario.cedula = marcas.usuario)))');

        if ($query->num_rows() > 0) {

            return $query; // just return $query
        }
    }

    public function getConsultaPDF($cedula, $estado, $desde, $hasta) {

        $query = $this->db->query('SELECT usuario.nombre, usuario.apellidos, marcas.usuario, horario.entrada,  marcas.hora_actual 
                                   FROM usuario,marcas , horario 
                                   WHERE marcas.usuario = ' . $cedula . ' AND
                                         marcas.estado = ' . $estado . ' AND
                                         horario.id = marcas.horario AND
                                         marcas.usuario = usuario.cedula AND
                                         DATE_FORMAT(marcas.hora_actual,\'%Y-%m-%d\') >= DATE_FORMAT(' . "'" . $desde . "'" . ',\'%Y-%m-%d\') AND
                                         DATE_FORMAT(marcas.hora_actual,\'%Y-%m-%d\') <= DATE_FORMAT(' . "'" . $hasta . "'" . ',\'%Y-%m-%d\')');

        if ($query->num_rows() > 0) {

            return $query; // just return $query
        }else
            return NULL;
    }

}